package ik.xcj.hostpital.manage.service;

import ik.xcj.hostpital.manage.pojo.dto.*;
import ik.xcj.hostpital.manage.pojo.vo.DepartmentListItemVO;
import ik.xcj.hostpital.manage.pojo.vo.UserListItemVO;
import ik.xcj.hostpital.manage.pojo.vo.UserLoginByUserNameAndRoleVO;
import ik.xcj.hostpital.manage.pojo.vo.UserStandardVO;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Transactional
public interface UserService {
    /**
     * 注册用户
     *
     * @param userRegDTO
     */
    void insert(UserRegDTO userRegDTO);

    /**
     * 登陆
     *
     * @param userLoginDTO
     */
    String login(UserLoginDTO userLoginDTO);

    /**
     * 手机号登陆
     *
     * @param userLoginByPhoneDTO
     */
    String loginByPhone(UserLoginByPhoneDTO userLoginByPhoneDTO);


    /**
     * 发送手机号验证码
     *
     * @param phone
     */
    void senPhone(String phone);

    /**
     * 根据手机号查询用户名和角色
     *
     * @param phone 手机号
     * @return
     */
    UserLoginByUserNameAndRoleVO selectByPhone(String phone);


    /**
     * 根据用户名查询用户名和角色
     *
     * @param username 用户名
     * @return
     */
    UserLoginByUserNameAndRoleVO selectByUserName(String username);

    /**
     * 添加用户
     *
     * @param userAddNewDTO 新的用户数据
     */
    void addNew(UserAddNewDTO userAddNewDTO);

    /**
     * 根据id删除用户
     *
     * @param id 用户id
     */
    void deleteById(Long id);

    /**
     * 修改用户详情
     *
     * @param id            被修改的用户id
     * @param userUpdateDTO 封装了新数据的对象
     */
    void updateInfoById(Long id, UserUpdateDTO userUpdateDTO);

    /**
     * 根据用户id查询用户信息
     *
     * @param id 用户id
     */
    UserStandardVO getStandardById(Long id);

    /**
     * 根据用户名查询用户名和角色
     *
     * @param username 用户名
     */
    UserStandardVO getStandardByUsername(String username);

    /**
     * 根据手机号查询用户信息
     *
     * @param phone 手机号
     */
    UserStandardVO getStandardByPhone(String phone);

    /**
     * 查询用户数据列表
     *
     * @return 用户数据列表
     */
    List<UserListItemVO> list();




}
